<?php

/*
 * Para depurar
 */
error_reporting(E_ALL);

/*
 * Usuario conectado
 */
$usuario_conectado = NULL;

/*
 * $_SERVER['SCRIPT_FILENAME'] para coger la ruta absoluta en el servidor
 * guarda la cadena entera menos '/index.php'
 */
define('CAMINO', str_replace('index.php', '', $_SERVER['SCRIPT_FILENAME']));

/*
 * Para coger url absoluta en cliente 'http://www.ejemplo.com/'
 */
define('DOMINIO', $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['SERVER_NAME'] . str_replace('index.php', '', $_SERVER['PHP_SELF']));


require_once CAMINO . 'app/funciones.php';
require_once CAMINO . 'app/Model.php';
require_once CAMINO . 'app/plugins/facebook_request/iniciar_facebook.php';


/*
 * para depurar sin facebook
 */
//session_start();
//session_write_close();
//$id_session_facebook = session_id();
//$name_session_facebook = session_name();
//$user = NULL;
//$loginURL = '#';
//$statusURL = '#';
//$logoutURL = '#';
//$user_profile = NULL;



/*
 * SESSIONBROWSER es el nombre de la session que tendra un id diferente cada vez 
 * que el usuario cierra el navegador 
 * por si hay que crear una session diferente guarda
 * la id para poder referenciar a esta sesion posteriormente
 * session_id() ya fue iniciado en la API de facebook, por lo que utilizo
 * esa misma id que cambia cada vez que se reinicia el navegador, y concateno
 * una cadena ('SESSIONBROWSERid') para diferenciar esta session de la de facebook
 */
define('SESSIONBROWSER', 'SESSIONBROWSERCIBERTECH');
session_name(SESSIONBROWSER);
$id_session_privada = session_id() . 'SESSIONBROWSERid';
session_id($id_session_privada);
session_start();
session_write_close();

/*
 * SESSIONINFOR sesion para mostrar informacion al usuario
 */
define('SESSIONINFOR', 'SESSIONINFORCIBERTECH');

/*
 * COOKIECIBERTECH para guardar el acceso de usuario cuando deja marcada la opcion "no cerrar sesion"
 */
define('COOKIEACCESO', 'COOKIEACCESOCIBERTECH');

/*
 * Autoload, capturador de excepciones y capturador de errores
 */
spl_autoload_register('mi_autoload');
set_exception_handler('mi_exception_handler');
set_error_handler('mi_error_handler');



$key_controller = 'controller';
$key_action = 'action';
$key_require_login = 'require_login';
$mapa = array(
    'inicio' => array(
        $key_controller => 'Controller',
        $key_action => 'inicio',
        $key_require_login => FALSE),
    'servicios' => array(
        $key_controller => 'Controller',
        $key_action => 'servicios',
        $key_require_login => FALSE),
    'portfolio' => array(
        $key_controller => 'Controller',
        $key_action => 'portfolio',
        $key_require_login => FALSE),
    'contacto' => array(
        $key_controller => 'Controller',
        $key_action => 'contacto',
        $key_require_login => FALSE),
    'validar_login' => array(
        $key_controller => 'Controller',
        $key_action => 'validar_login',
        $key_require_login => FALSE),
    'recordar_clave' => array(
        $key_controller => 'Controller',
        $key_action => 'recordar_clave',
        $key_require_login => FALSE),
    'cambiar_clave' => array(
        $key_controller => 'Controller',
        $key_action => 'cambiar_clave',
        $key_require_login => FALSE),
    'registro' => array(
        $key_controller => 'Controller',
        $key_action => 'registro',
        $key_require_login => FALSE),
    'validar_registro' => array(
        $key_controller => 'Controller',
        $key_action => 'validar_registro',
        $key_require_login => FALSE),
    'reenviar_activacion' => array(
        $key_controller => 'Controller',
        $key_action => 'reenviar_activacion',
        $key_require_login => FALSE),
    'activar_cuenta' => array(
        $key_controller => 'Controller',
        $key_action => 'activar_cuenta',
        $key_require_login => FALSE),
    'cerrar_sesion' => array(
        $key_controller => 'Controller',
        $key_action => 'cerrar_sesion',
        $key_require_login => TRUE)
);


/*
 * Error 404 si action no esta en mapa 
 */
if (isset($_GET[$key_action])) {
    if (isset($mapa[$_GET[$key_action]])) {
        $action = $_GET[$key_action];
    } else {
        header('HTTP/1.0 404 Not Found');
        require CAMINO . 'app/views/error_404.php';
    }
} else {
    $action = 'inicio';
}



/*
 * Si existe la cookie
 * crea la session de usuario
 */
if (isset($_COOKIE[COOKIEACCESO])) {
    establecer_session_privada('codigo_acceso', $_COOKIE[COOKIEACCESO]);
}


/*
 * busca la sesion de usuario y compara el codigo de acceso
 * con los que existen en la tabla usuarios para asegurarse de que este usuario existe,
 * y en ese caso, obtener sus datos en $usuario->rows
 * En caso de existir si $mapa['action']['require_login'] == FALSE le lleva a $action = 'foro'
 */
if ($result = buscar_key_session(SESSIONBROWSER, $id_session_privada, 'codigo_acceso')) {
    $usuario_conectado = new Usuario();
    if ($usuario_conectado->buscar_codigo_acceso($result)) {
        if (!$mapa[$action][$key_require_login]) {
            $action = 'foro';
        }
    } else {
        $action = 'cerrar_sesion';
    }
} else if ($user) { /* si existe la sesion de facebook */
    $usuario_conectado = new Usuario();
    if ($usuario_conectado->comprobar_facebook()) {
        establecer_session_privada('codigo_acceso', $usuario_conectado->codigo_acceso);
    }
    if (!$mapa[$action][$key_require_login]) {
        $action = 'foro';
    }
} else if ($mapa[$action][$key_require_login]) { /* si no existe la sesion de usuario o facebook y se requiere login */
    $action = 'inicio';
}


$controlador = $mapa[$action];
$clase_controlador = $controlador[$key_controller];
$metodo = $controlador[$key_action];

$objeto_controlador = new $clase_controlador();
$objeto_controlador->$metodo();
